package com.xunshibao.action.oauth.renren;

import java.io.IOException;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.xunshibao.action.oauth.OAuthHelper;

@Controller
@RequestMapping(value = "/renren")
public class RenRenController {
	/**
	 * 当用户授权你的应用后，开放平台会回调这个地址通知应用。
	 * 
	 * <pre>
	 *  授权回调地址，亦称Post Authorize Callback URL。 当用户第一次给你的应用授权后，平台会回调此URL通知应用。
	 * Note: 回调地址必须是完整的路径，比如：http://www.xiaoneiapp.com/callback.php。类似以下这些路径都是错误的：
	 * 1. www.xiaoneiapp.com/callback.php. (路径必须是完整的)
	 * 2. http://apps.renren.com/myapptest/callback.do. (必须你的服务器的路径，不能是apps.renren.com下相对路径)
	 * </pre>
	 * 
	 * 参数列表<br/>
	 * <hr/>
	 * xn_sig_authorize int 值为1<br/>
	 * xn_sig_user int 用户的ID<br/>
	 * xn_sig_app_id int 应用的ID<br/>
	 * xn_sig_time long 时间<br/>
	 * xn_sig_added int 值为1<br/>
	 * xn_sig_method string 值为“POST”<br/>
	 * xn_sig_api_key string 应用的api_key<br/>
	 * xn_sig_session_key string 用户的session_key<br/>
	 * xn_sig_expires long session_key过期的时间<br/>
	 * xn_sig string
	 * 签名认证，算法见此处。此签名用于验证该请求是否由开放平台发送。生成此签名前，参数名需要去掉"xn_sig_"的前缀,并且不包含
	 * "xn_sig"这个参数<br/>
	 * 
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	@RequestMapping(value = "/authentication")
	public void authentication(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Map<String, Object> params = request.getParameterMap();
		Set<Map.Entry<String, Object>> set = params.entrySet();
		for (Map.Entry<String, Object> entry : set) {
			String key = entry.getKey();
			Object value = entry.getValue();
		}
		request.getRequestDispatcher("/index.html").forward(request, response);
	}

	/**
	 * <pre>
	 * 移除回调地址，亦称卸载回调地址，Post Remove Callback URL 。当用户移除你的应用后，平台会回调这个URL告知应用。
	 * 
	 * Note: 回调地址必须是完整的路径，比如：http://www.xiaoneiapp.com/callback.php。
	 * 
	 * 类似以下这些路径都是错误的：
	 * 
	 * 1. www.xiaoneiapp.com/callback.php. (路径必须是完整的)
	 * 
	 * 2. http://apps.renren.com/myapptest/callback.do. (必须你的服务器的路径，不能是apps.renren.com下相对路径)
	 * </pre>
	 * 
	 * 参数列表<br/>
	 * <hr/>
	 * 
	 * 平台回调时会传入如下参数：<br/>
	 * 参数名 类型 描述<br/>
	 * userId int 移除应用的用户的ID，这个参数已经过期，请用xn_sig_user替代<br/>
	 * xn_sig_user int 用户的ID<br/>
	 * xn_sig_app_id int 你的应用的ID<br/>
	 * xn_sig_time long 时间<br/>
	 * xn_sig_added int 值为0<br/>
	 * xn_sig_method string 值为“POST”<br/>
	 * xn_sig_api_key string 你的应用的api_key<br/>
	 * xn_sig string
	 * 签名认证，算法见此处。此签名用于验证该请求是否由开放平台发送。生成此签名前，参数名需要去掉"xn_sig_"的前缀,并且不包含
	 * "xn_sig"这个参数<br/>
	 * 
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	@RequestMapping(value = "/revoke")
	public void revoke(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/index.html").forward(request, response);
	}
	
	@RequestMapping(value = "/validcookie")
	public @ResponseBody Model validcookie(HttpServletRequest request, Model model) {
		boolean isConnectValid = OAuthHelper.validRenRenLogin(request);
		model.addAttribute("state", isConnectValid);
		return model;
	}

	@RequestMapping(value = "/index.html")
	public void testIndex(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/index.html").forward(request, response);
	}
}